// redisTest.js - Redis缓存功能测试脚本
const redisUtil = require('../utils/redisUtil');
const Video = require('../models/Video');

async function testRedisCache() {
  console.log('开始测试Redis缓存功能...');
  
  try {
    // 1. 测试连接
    console.log('测试Redis连接...');
    const redisClient = redisUtil.getRedisClient();
    const pong = await redisClient.ping();
    console.log('Redis连接成功:', pong);
    
    // 2. 测试基本缓存操作
    console.log('\n测试基本缓存操作...');
    
    // 设置缓存
    await redisUtil.setCache('test:key', { name: '测试缓存', value: 123 });
    console.log('缓存设置成功');
    
    // 获取缓存
    const cachedData = await redisUtil.getCache('test:key');
    console.log('缓存获取成功:', cachedData);
    
    // 删除缓存
    await redisUtil.deleteCache('test:key');
    console.log('缓存删除成功');
    
    // 验证删除
    const deletedData = await redisUtil.getCache('test:key');
    console.log('缓存已删除:', deletedData === null);
    
    // 3. 测试ZSET操作
    console.log('\n测试ZSET操作...');
    
    // 添加元素到ZSET
    await redisClient.zadd('test:zset', 100, 'item1');
    await redisClient.zadd('test:zset', 200, 'item2');
    await redisClient.zadd('test:zset', 150, 'item3');
    console.log('ZSET元素添加成功');
    
    // 获取ZSET元素
    const zsetItems = await redisClient.zrange('test:zset', 0, -1, 'WITHSCORES');
    console.log('ZSET元素获取成功:', zsetItems);
    
    // 获取分数最高的元素
    const topItem = await redisClient.zrevrange('test:zset', 0, 0, 'WITHSCORES');
    console.log('ZSET最高分元素:', topItem);
    
    // 删除测试ZSET
    await redisClient.del('test:zset');
    
    // 4. 测试视频缓存功能
    console.log('\n测试视频缓存功能...');
    
    // 测试获取推荐视频（应该会从数据库加载并缓存）
    console.log('获取推荐视频（首次，应从数据库加载）...');
    const videos1 = await Video.getRecommendedVideos(1, 10);
    console.log(`推荐视频加载成功，数量: ${videos1.length}`);
    
    console.log('获取推荐视频（再次，应从缓存加载）...');
    const videos2 = await Video.getRecommendedVideos(1, 10);
    console.log(`推荐视频再次加载成功，数量: ${videos2.length}`);
    
    // 测试获取热门视频
    console.log('\n获取热门视频...');
    const hotVideos = await Video.getHotVideos(1, 10);
    console.log(`热门视频加载成功，数量: ${hotVideos.length}`);
    
    // 测试幻灯片视频
    console.log('\n获取幻灯片视频...');
    const slideVideos = await Video.getSlideVideos();
    console.log(`幻灯片视频加载成功，数量: ${slideVideos.length}`);
    
    console.log('\nRedis缓存功能测试完成！');
    
  } catch (error) {
    console.error('Redis缓存测试失败:', error);
  } finally {
    // 关闭Redis连接
    await redisUtil.closeRedisClient();
    console.log('\nRedis连接已关闭');
  }
}

// 运行测试
testRedisCache().catch(console.error);